package org.dromara.profiles.domain.vo;

import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;

import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Size;
import org.hibernate.validator.constraints.Length;

import java.io.Serializable;
import java.time.LocalDateTime;
import java.util.List;

/**
 * 捐赠者信息 Vo
 */
@Data
public class BusDonorVo implements Serializable {

    @Schema(description = "主键")
    private Long id;

    @Schema(description = "出生年份")
    private Integer birth;

    @Schema(description = "身高")
    private Integer height;

    @Schema(description = "体重")
    private Integer weight;

    @Schema(description = "血型")
    private Object bloodType;

    @Schema(description = "瞳色")
    private Object eyeColor;

    @Schema(description = "发色")
    private Object hairColor;

    @Schema(description = "肤色")
    private Object skinTone;

    @Schema(description = "体型")
    private Object bodyShape;

    @Schema(description = "族裔")
    private Object ethnicity;

    @Size(max = 200, message = "血统长度不能超过200")
    @Length(max = 200, message = "血统长度不能超过200")
    @Schema(description = "血统")
    private String ancestry;

    @Size(max = 100, message = "出生地长度不能超过100")
    @Length(max = 100, message = "出生地长度不能超过100")
    @Schema(description = "出生地")
    private String birthplace;

    @Size(max = 100, message = "现居住地长度不能超过100")
    @Length(max = 100, message = "现居住地长度不能超过100")
    @Schema(description = "现居住地")
    private String residence;

    @Size(max = 100, message = "职业长度不能超过100")
    @Length(max = 100, message = "职业长度不能超过100")
    @Schema(description = "职业")
    private String occupation;

    @Size(max = 200, message = "运动习惯长度不能超过200")
    @Length(max = 200, message = "运动习惯长度不能超过200")
    @Schema(description = "运动习惯")
    private String exerciseHabit;

    @Size(max = 200, message = "性格特点长度不能超过200")
    @Length(max = 200, message = "性格特点长度不能超过200")
    @Schema(description = "性格特点")
    private String personality;

    @Schema(description = "婚姻状况")
    private Object maritalStatus;

    @Size(max = 200, message = "特殊才能长度不能超过200")
    @Length(max = 200, message = "特殊才能长度不能超过200")
    @Schema(description = "特殊才能")
    private String talent;

    @Size(max = 65535, message = "自我介绍长度超限")
    @Length(max = 65535, message = "自我介绍长度超限")
    @Schema(description = "自我介绍")
    private String selfIntro;

    @NotNull(message = "捐赠者类型不能为空")
    @Schema(description = "捐赠者类型: 1-捐卵者, 2-捐精者", requiredMode = Schema.RequiredMode.REQUIRED)
    private Integer donorType;

    /* 以下六个列表字段类型保持原样，仅做展示传输用 */
    @Schema(description = "医疗信息列表")
    private List<?> medicalList;

    @Schema(description = "教育信息列表")
    private List<?> educationList;

    @Schema(description = "家庭信息列表")
    private List<?> familyList;

    @Schema(description = "历史记录列表")
    private List<?> historyList;

    @Schema(description = "问卷信息列表")
    private List<?> questionList;

    @Schema(description = "生殖信息")
    private Object reproductiveInfo;

    @Schema(description = "附件列表")
    private List<?> attachmentList;

    @Schema(description = "创建时间")
    private LocalDateTime createTime;

    @Schema(description = "更新时间")
    private LocalDateTime updateTime;

    @Schema(description = "删除标志（0存在 1删除）")
    private Integer delFlag;
}
